From 126018f2acd5416434747423e61a4690108b9dc9 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 2 May 2014 10:48:48 +0200 Subject: [PATCH] x86/EPT: consider page order when checking for APIC MFN This was overlooked in 3d90d6e6 ("x86/EPT: split super pages upon mismatching memory types"). Signed-off-by: Jan Beulich Acked-by: Kevin Tian Reviewed-by: Tim Deegan --- xen/arch/x86/hvm/mtrr.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c index d494fedbd5..894de5f54c 100644 --- a/xen/arch/x86/hvm/mtrr.c +++ b/xen/arch/x86/hvm/mtrr.c @@ -816,15 +816,18 @@ int epte_get_entry_emt(struct domain *d, unsigned long gfn, mfn_t mfn, !has_arch_pdevs(d)) ) { ASSERT(!direct_mmio || - mfn_x(mfn) == d->arch.hvm_domain.vmx.apic_access_mfn); + !((mfn_x(mfn) ^ d->arch.hvm_domain.vmx.apic_access_mfn) >> + order)); *ipat = 1; return MTRR_TYPE_WRBACK; } if ( direct_mmio ) { - if ( mfn_x(mfn) != d->arch.hvm_domain.vmx.apic_access_mfn ) + if ( (mfn_x(mfn) ^ d->arch.hvm_domain.vmx.apic_access_mfn) >> order ) return MTRR_TYPE_UNCACHABLE; + if ( order ) + return -1; *ipat = 1; return MTRR_TYPE_WRBACK; } -- 2.30.2